/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica;

/**
 *
 * @author Elias Mendoza
 * Modulo de procesamiento de los datos recividos del puerto serial
 */
import modelo.ContenedorComponente;
import dao.GrupoDAO;
import java.util.*;
import java.util.List;
import javax.swing.JOptionPane;
import modelo.Sustrato;
import vista.panel.InterfazInicio;

public class ProcesaCadena {

  GrupoDAO gd = new GrupoDAO();
  InterfazInicio p;
  
  public GrupoSensores objgrupo;
  public String dato;
  public boolean charIsCorrect = false;
  private boolean continua = true;
  public String caracteres_validos = "ABCDEFGHIJKLMNOP1234567890.-Sp*";
  
  private Sustrato sustrato;
  public String grupos_registrados;
  public String conjunto_grupos = "";
  public String conjuntoAux = "";
  public String valores_num = "0123456789.";
  public int contax = 0;
  //Declaracion y creacion de ArrayList que guardara los datos leidos del sensor
  //Vaciandolos en un objeto GrupoSensores
  public ArrayList<GrupoSensores> listGrupos = new ArrayList<GrupoSensores>();
  public int grupo;//variable que almacena el ID del grupo de sensor
  //valores de humedad de los cuatro listGrupos que conforman un grupo
  String vsensor1 = "";
  String vsensor2 = "";
  String vsensor3 = "";
  String vsensor4 = "";
  String val_ref = "";//valor  de referecia de humedad
  String val_sta = "";//valor  del estado de la valvula
  String val_dn = "";//valor de dia o noche
  ContenedorComponente cc;
  List listUltReg;

  
//  public ProcesaCadena(ContenedorComponente cc,List listUltReg) {
//    this.cc = cc;
//    this.listUltReg = listUltReg;
//    
//    grupos_registrados = gd.grupos();
//    System.out.println("Grupos Registrados: " +grupos_registrados);
//  }
   public ProcesaCadena(InterfazInicio p) {
    this.p=p;
    grupos_registrados = gd.grupos();
    System.out.println("Grupos Registrados: " +grupos_registrados);
  }

  public void recibeLectura(String cad) {
//    System.out.println(cad);
    if (caracteres_validos.indexOf(cad) > -1 ) {
      if (cad.equals("-") && continua == true) {
        contax++;
      }
//      System.out.println("El caracter es valido: " + cad);
      p.jTextPaneDatosRecibidos.setText(p.jTextPaneDatosRecibidos.getText() + cad);
      charIsCorrect = true;
    } else {
      System.out.println("El caracter no fue valido: " + cad);
      p.jTextPaneDatosRecibidos.setText(p.jTextPaneDatosRecibidos.getText() + cad);
      charIsCorrect = false;
    }
    if(contax == 0){
      //Determina que a que grupo de listGrupos pertenece la lectura
      if (grupos_registrados.indexOf(cad) > -1 && charIsCorrect == true) {
          if (conjunto_grupos.equals("")) {
              conjunto_grupos = consultaGrupoSustrato(cad);
          }
          if (conjunto_grupos.indexOf(cad) > -1) {
              objgrupo = new GrupoSensores();
              objgrupo.setGrupo(cad);
              conjuntoAux+=cad;
              System.out.println("Grupo: --" + objgrupo.getGrupo());
              continua = true;
          }
      }
      else{
        System.out.println("El grupo "+cad+" no se encuentra Registrado en La base de DATOS");
        continua = false;
      }
    }
    //comenzar a concatenar los valores de humedad cada sensor por grupos de sendores
    if (valores_num.indexOf(cad) > -1 && charIsCorrect == true && continua == true) {
      switch (contax) {
        case 1:
          vsensor1 += cad;
          break;
        case 2:
          vsensor2 += cad;
          break;
        case 3:
          vsensor3 += cad;
          break;
        case 4:
          vsensor4 += cad;
          break;
        case 5:
          val_ref += cad;
          break;
        case 6:
          val_sta += cad;
          break;
        case 7:
          val_dn += cad;
          break;
      }
    }
    if (cad.equals("-") && contax == 8 && charIsCorrect == true && continua == true) {
      llenaObjGrupo();
      //Vaciando los valores actuales de las variables para recibir los nuevos
      contax = 0;
      vsensor1 = "";
      vsensor2 = "";
      vsensor3 = "";
      vsensor4 = "";
      val_ref = "";
      val_sta = "";
      val_dn = "";
      
      if(!terminado()){
        System.out.println("No se han llenado todos los grupos");
      } 
    }
  }

  public void llenaObjGrupo() {//Asigna los valors a GrupoSensores
//    objgrupo.setVsensor1(vsensor1);
//    objgrupo.setVsensor2(vsensor2);
//    objgrupo.setVsensor3(vsensor3);
//    objgrupo.setVsensor4(vsensor4);
    objgrupo.addLectura(vsensor1);
    objgrupo.addLectura(vsensor2);
    objgrupo.addLectura(vsensor3);
    objgrupo.addLectura(vsensor4);
    
    objgrupo.setVal_ref(val_ref);
    objgrupo.setVal_sta(val_sta);
    objgrupo.setVal_dn(Integer.parseInt(val_dn));
    listGrupos.add(objgrupo);
    System.out.println("El Gruopo: " + objgrupo.getGrupo() + " se ha llenado");
  }

  public boolean terminado() {//metodo que sirve para comprobar si se han insertado los 4 objetos en el ArrayList
    boolean ter = false;
     if(conjuntoAux.equals(conjunto_grupos)){
        System.out.println("Se han llenado los " + listGrupos.size() + " grupos");
        imprimeDatos();
        conjuntoAux="";
        conjunto_grupos="";
        AlmacenaLectura almacena = new AlmacenaLectura(p);
        almacena.registraLectura(listGrupos, sustrato);
//        OperacionBaseDatos op = new OperacionBaseDatos(cc,listUltReg);
//        op.registraLectura(listGrupos,sustrato);
//        cc.getDatosRecibidos().setText("");
        listGrupos.clear();
        ter = true;
     } 
    return ter;
  }

  public void imprimeDatos() {
    for (GrupoSensores tmp : listGrupos) {
        System.out.print(tmp.getGrupo());
        for(String f:tmp.getLectura()){
            System.out.print("["+f+"]");
        }
        System.out.println(","
              + tmp.getVal_sta() + 
              + tmp.getVal_dn());
    }
  }
  public String consultaGrupoSustrato(String grupo) {
    System.out.println("dos");
    GrupoDAO grupoDAO = new GrupoDAO();
    //gd.getSustratoByGrupo(grupo);
    String g = "";
    Iterator i = grupoDAO.conjutoGrupo(grupo);
    if (i != null) {
      while (i.hasNext()) {
        Object[] registro = (Object[]) i.next();
        g += (String) registro[0].toString();
        sustrato = (Sustrato) registro[1];
        System.out.println("El grupo: " + grupo + " pertenece al sustrato: " + sustrato.getNombre());
      }
      grupoDAO.cerrarSesionBeforeIterator();

      System.out.println("los grupos encontrados fueron: " + g);
    }
    else
      System.out.println("No se encontraron Grupos");
    return g;
  }
}
